home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue26 / construc / COUNT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-07-27  |  3.4 KB  |  126 lines

  1. {$APPTYPE CONSOLE}
  2. {$DEFINE DRBOB}
  3. {$R BITMAP.RES}
  4. {$I-}
  5. uses
  6.   Windows, SysUtils, Classes, Graphics, JPEG {$IFDEF DRBOB}, DrBobDOS{$ENDIF};
  7. type
  8.   Digits = 0..9;
  9. var
  10.   Digit: Array[Digits] of TBitmap;
  11.   Bitmap: TBitmap;
  12.   FromRect,ToRect: TRect;
  13.   Stream: TMemoryStream;
  14.   counter,i: Integer;
  15.   log: Text;
  16.   t: Char;
  17.  
  18.   function Number(i: Digits): TBitmap;
  19.   begin
  20.     if Digit[i] = nil then
  21.     begin
  22.       Digit[i] := TBitmap.Create;
  23.       Digit[i].LoadFromResourceID(HInstance, i) { 0 = 10 }
  24.     end;
  25.     Result := Digit[i]
  26.   end {Number};
  27.  
  28. begin
  29.   if ParamCount = 0 then { for use in web browsers }
  30.   begin
  31.     writeln('content-type: image/jpg');
  32.     writeln
  33.   end;
  34.   Digit[0] := TBitmap.Create;
  35.   Digit[0].LoadFromResourceID(HInstance, 10);
  36.   Bitmap := TBitmap.Create;
  37.   try
  38.     Bitmap.LoadFromResourceID(HInstance, 42);
  39.     ToRect.Left := 2;
  40.     ToRect.Top := 2;
  41.     ToRect.Right := 20;
  42.     ToRect.Bottom := 25;
  43.     FromRect.Left := 1;
  44.     FromRect.Top := 1;
  45.     FromRect.Right := 20;
  46.     FromRect.Bottom := 25;
  47.     { COUNTER }
  48.     System.Assign(log,'counter');
  49.     reset(log);
  50.     if IOResult = 0 then readln(log,counter)
  51.                     else counter := 0;
  52.     Inc(counter);
  53.     rewrite(log);
  54.     writeln(log,counter);
  55.     close(log);
  56.     if IOResult <> 0 then { skip };
  57.   {$IFDEF DRBOB}
  58.     { LOG }
  59.     ShortDateFormat := 'YYYYMMDD';
  60.     System.Assign(log,DateToStr(Now) + '.log');
  61.     ShortDateFormat := 'YYYY/MM/DD';
  62.     ShortTimeFormat := 'HH:MM:SS';
  63.     reset(log);
  64.     if IOResult = 0 then Append(log)
  65.                     else Rewrite(log);
  66.     write(log,counter:7,': ',DateTimeToStr(Now),' ');
  67.     with TBDosEnvironment.Create(nil) do
  68.     try
  69.       write(log,GetDosEnvStr('REMOTE_ADDR'));
  70.     finally
  71.       Free
  72.     end;
  73.     writeln(log);
  74.     close(log);
  75.     if IOResult <> 0 then { skip };
  76.   {$ENDIF}
  77.  
  78.     Bitmap.Canvas.CopyMode := cmSrcPaint;
  79.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 1000000) mod 10).Canvas,FromRect);
  80.     Inc(ToRect.Left,21);
  81.     Inc(ToRect.Right,21);
  82.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 100000) mod 10).Canvas,FromRect);
  83.     Inc(ToRect.Left,20);
  84.     Inc(ToRect.Right,20);
  85.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 10000) mod 10).Canvas,FromRect);
  86.     Inc(ToRect.Left,20);
  87.     Inc(ToRect.Right,20);
  88.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 1000) mod 10).Canvas,FromRect);
  89.     Inc(ToRect.Left,21);
  90.     Inc(ToRect.Right,21);
  91.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 100) mod 10).Canvas,FromRect);
  92.     Inc(ToRect.Left,20);
  93.     Inc(ToRect.Right,20);
  94.     Bitmap.Canvas.CopyRect(ToRect,Number((counter div 10) mod 10).Canvas,FromRect);
  95.     Inc(ToRect.Left,20);
  96.     Inc(ToRect.Right,20);
  97.     Bitmap.Canvas.CopyRect(ToRect,Number(counter mod 10).Canvas,FromRect);
  98.     with TJPEGImage.Create do
  99.     try
  100.       Assign(Bitmap);
  101.       CompressionQuality := 75; { reduces jpeg image size by factor of 3 }
  102.       Stream := TMemoryStream.Create;
  103.       try
  104.         SaveToStream(Stream);
  105.         Stream.Seek(0,0);
  106.         for i:=1 to Stream.Size do
  107.         begin
  108.           Stream.Read(t,1);
  109.           write(t)
  110.         end
  111.       finally
  112.         Stream.Free
  113.       end
  114.     finally
  115.       Free
  116.     end
  117.   finally
  118.     for i:=0 to 9 do
  119.     begin
  120.       if Assigned(Digit[i]) then Digit[i].Free;
  121.       Digit[i] := nil
  122.     end;
  123.     Bitmap.Free
  124.   end
  125. end.
  126.